package com.examples.composite;


import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;

public class CompositeEnhanced {

  public static void main(String[] a) {
    Display d = Display.getDefault();
    Shell s = new Shell(d);

    s.setSize(250, 250);

    s.setText("A Shell Composite Example");

    GridLayout gl = new GridLayout();
    gl.numColumns = 4;
    s.setLayout(gl);
    s.setLayout(gl);

    GridComposite gc = new GridComposite(s);
    
    GridData gd = new GridData(GridData.FILL_BOTH);
    gd.horizontalSpan = 4;
    
    gc.setLayoutData(gd);

    RowComposite rc = new RowComposite(s);
    gd = new GridData(GridData.FILL_HORIZONTAL);
    rc.setLayoutData(gd);

    s.open();
    while (!s.isDisposed()) {
      if (!d.readAndDispatch())
        d.sleep();
    }
  //display.dispose(); //Commented only for SWTShowcase application.
  }
}

class GridComposite extends Composite {

  public GridComposite(Composite c) {
    super(c, SWT.BORDER);
    GridLayout gl = new GridLayout();
    gl.numColumns = 3;
    this.setLayout(gl);
    
    final Label l1 = new Label(this, SWT.BORDER);
    l1.setText("Column One");
    final Label l2 = new Label(this, SWT.BORDER);
    l2.setText("Column Two");
    final Label l3 = new Label(this, SWT.BORDER);
    l3.setText("Column Three");
    final Text t1 = new Text(this, SWT.SINGLE | SWT.BORDER);
    final Text t2 = new Text(this, SWT.SINGLE | SWT.BORDER);
    final Text t3 = new Text(this, SWT.SINGLE | SWT.BORDER);
    final Text t4 = new Text(this, SWT.SINGLE | SWT.BORDER);
    final Text t5 = new Text(this, SWT.SINGLE | SWT.BORDER);
    final Text t6 = new Text(this, SWT.SINGLE | SWT.BORDER);

    GridData gd = new GridData();
    gd.horizontalAlignment = GridData.CENTER;
    l1.setLayoutData(gd);

    gd = new GridData();
    gd.horizontalAlignment = GridData.CENTER;
    l2.setLayoutData(gd);

    gd = new GridData();
    gd.horizontalAlignment = GridData.CENTER;
    l3.setLayoutData(gd);

    gd = new GridData(GridData.FILL_HORIZONTAL);
    t1.setLayoutData(gd);

    gd = new GridData(GridData.FILL_HORIZONTAL);
    t2.setLayoutData(gd);

    gd = new GridData(GridData.FILL_HORIZONTAL);
    t3.setLayoutData(gd);

    gd = new GridData(GridData.FILL_HORIZONTAL);
    t4.setLayoutData(gd);

    gd = new GridData(GridData.FILL_HORIZONTAL);
    t5.setLayoutData(gd);

    gd = new GridData(GridData.FILL_HORIZONTAL);
    t6.setLayoutData(gd);
  }

}

class RowComposite extends Composite {

  final Button okBtn;

  final Button cancelBtn;

  public RowComposite(Composite c) {
    super(c, SWT.NO_FOCUS);
    RowLayout rl = new RowLayout();
    rl.wrap = false;
    rl.pack = false;
    this.setLayout(rl);
    okBtn = new Button(this, SWT.BORDER | SWT.PUSH);
    okBtn.setText("OK");
    okBtn.setSize(30, 20);
    cancelBtn = new Button(this, SWT.BORDER | SWT.PUSH);
    cancelBtn.setText("Cancel");
    cancelBtn.setSize(30, 20);
    cancelBtn.addSelectionListener(new SelectionAdapter() {
      public void widgetSelected(SelectionEvent e) {
        System.out.println("Cancel was clicked");
      }
    });
  }
}
